Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Commit 3547991f289716c3693c5091251e0a62617b85b2


Parents : b1ee794
Author : Ivan <e46112d44649266d71fe2193e00a4710>
Signature : T66BB85Valid, signed by author
Date : 2026-07-22T15:21:07-05:00

feat: add localization support for duplex modes and push-to-talk functionality across multiple languages

Changes
Diff

diff --git a/meshchatx.rsm b/meshchatx.rsm
index cbbd71b6..d58153f5 100644
Binary files a/meshchatx.rsm and b/meshchatx.rsm differ

diff --git a/meshchatx/src/frontend/locales/de.json b/meshchatx/src/frontend/locales/de.json
index f3a1e298..07298270 100644
--- a/meshchatx/src/frontend/locales/de.json
+++ b/meshchatx/src/frontend/locales/de.json
@@ -2964,6 +2964,24 @@
"minimize": "Minimieren",
"active": "Aktiv",
"default_quality": "Standardqualität",
+ "default_duplex": "Standard-Duplex",
+ "full_duplex": "Vollduplex",
+ "half_duplex": "Halbduplex",
+ "switch_to_full_duplex": "Zu Vollduplex wechseln",
+ "switch_to_half_duplex": "Zu Halbduplex wechseln",
+ "ptt_hold_to_talk": "Zum Sprechen halten",
+ "ptt_transmitting": "Senden",
+ "ptt_listening": "Empfangen",
+ "ptt_hold_hint": "Halten, um die Übertragung in diesem Halbduplex-Anruf freizugeben",
+ "ptt_spacebar_hint": "Leertaste halten zum Sprechen",
+ "tx_packets": "TX-Pakete",
+ "rx_packets": "RX-Pakete",
+ "tx_data": "TX-Daten",
+ "rx_data": "RX-Daten",
+ "tx_rate": "TX-Rate",
+ "rx_rate": "RX-Rate",
+ "failed_to_switch_call_mode": "Duplexmodus konnte nicht gewechselt werden",
+ "failed_to_set_ptt": "Push-to-Talk konnte nicht gesetzt werden",
"active_call": "Aktiver Anruf",
"status": "Status",
"failed_to_answer_call": "Anruf konnte nicht angenommen werden",

diff --git a/meshchatx/src/frontend/locales/es.json b/meshchatx/src/frontend/locales/es.json
index 132a0fd9..8b5035ba 100644
--- a/meshchatx/src/frontend/locales/es.json
+++ b/meshchatx/src/frontend/locales/es.json
@@ -3160,6 +3160,24 @@
"minimize": "Minimizar",
"active": "Activa",
"default_quality": "Calidad predeterminada",
+ "default_duplex": "Dúplex predeterminado",
+ "full_duplex": "Dúplex completo",
+ "half_duplex": "Semidúplex",
+ "switch_to_full_duplex": "Cambiar a dúplex completo",
+ "switch_to_half_duplex": "Cambiar a semidúplex",
+ "ptt_hold_to_talk": "Mantener para hablar",
+ "ptt_transmitting": "Transmitiendo",
+ "ptt_listening": "Escuchando",
+ "ptt_hold_hint": "Mantén pulsado para activar la transmisión en esta llamada semidúplex",
+ "ptt_spacebar_hint": "Mantén Espacio para hablar",
+ "tx_packets": "Paquetes TX",
+ "rx_packets": "Paquetes RX",
+ "tx_data": "Datos TX",
+ "rx_data": "Datos RX",
+ "tx_rate": "Tasa TX",
+ "rx_rate": "Tasa RX",
+ "failed_to_switch_call_mode": "No se pudo cambiar el modo dúplex",
+ "failed_to_set_ptt": "No se pudo activar el pulsador para hablar",
"active_call": "Llamada activa",
"status": "Situación",
"failed_to_answer_call": "Error al responder la llamada",

diff --git a/meshchatx/src/frontend/locales/fi.json b/meshchatx/src/frontend/locales/fi.json
index 82c62367..9c9ef9ac 100644
--- a/meshchatx/src/frontend/locales/fi.json
+++ b/meshchatx/src/frontend/locales/fi.json
@@ -3365,6 +3365,24 @@
"minimize": "Pienennä",
"active": "Käytössä",
"default_quality": "Oletuslaatu",
+ "default_duplex": "Oletusdupleksi",
+ "full_duplex": "Täysdupleksi",
+ "half_duplex": "Puolidupleksi",
+ "switch_to_full_duplex": "Vaihda täysdupleksiin",
+ "switch_to_half_duplex": "Vaihda puolidupleksiin",
+ "ptt_hold_to_talk": "Pidä puhuaksesi",
+ "ptt_transmitting": "Lähettää",
+ "ptt_listening": "Kuuntelee",
+ "ptt_hold_hint": "Pidä painettuna avataksesi lähetyksen tässä puolidupleksipuhelussa",
+ "ptt_spacebar_hint": "Pidä välilyöntiä puhuaksesi",
+ "tx_packets": "TX-paketit",
+ "rx_packets": "RX-paketit",
+ "tx_data": "TX-data",
+ "rx_data": "RX-data",
+ "tx_rate": "TX-nopeus",
+ "rx_rate": "RX-nopeus",
+ "failed_to_switch_call_mode": "Dupleksitilan vaihto epäonnistui",
+ "failed_to_set_ptt": "Push-to-talkin asetus epäonnistui",
"active_call": "Käynnissä oleva puhelu",
"status": "Tila",
"failed_to_answer_call": "Puheluun vastaaminen epäonnistui",

diff --git a/meshchatx/src/frontend/locales/fr.json b/meshchatx/src/frontend/locales/fr.json
index 63d5dd76..d5462a23 100644
--- a/meshchatx/src/frontend/locales/fr.json
+++ b/meshchatx/src/frontend/locales/fr.json
@@ -3160,6 +3160,24 @@
"minimize": "Réduire",
"active": "Actif",
"default_quality": "Qualité par défaut",
+ "default_duplex": "Duplex par défaut",
+ "full_duplex": "Duplex intégral",
+ "half_duplex": "Semi-duplex",
+ "switch_to_full_duplex": "Passer en duplex intégral",
+ "switch_to_half_duplex": "Passer en semi-duplex",
+ "ptt_hold_to_talk": "Maintenir pour parler",
+ "ptt_transmitting": "Transmission",
+ "ptt_listening": "Écoute",
+ "ptt_hold_hint": "Maintenez pour activer l'émission sur cet appel semi-duplex",
+ "ptt_spacebar_hint": "Maintenez Espace pour parler",
+ "tx_packets": "Paquets TX",
+ "rx_packets": "Paquets RX",
+ "tx_data": "Données TX",
+ "rx_data": "Données RX",
+ "tx_rate": "Débit TX",
+ "rx_rate": "Débit RX",
+ "failed_to_switch_call_mode": "Échec du changement de mode duplex",
+ "failed_to_set_ptt": "Échec de l'activation du mode appuyer-pour-parler",
"active_call": "Appel actif",
"status": "État",
"failed_to_answer_call": "Impossible de répondre à l'appel",

diff --git a/meshchatx/src/frontend/locales/it.json b/meshchatx/src/frontend/locales/it.json
index c26c7f98..34c2e478 100644
--- a/meshchatx/src/frontend/locales/it.json
+++ b/meshchatx/src/frontend/locales/it.json
@@ -3212,6 +3212,24 @@
"minimize": "Minimizza",
"active": "Attivo",
"default_quality": "Qualità Predefinita",
+ "default_duplex": "Duplex Predefinito",
+ "full_duplex": "Full Duplex",
+ "half_duplex": "Half Duplex",
+ "switch_to_full_duplex": "Passa a full duplex",
+ "switch_to_half_duplex": "Passa a half duplex",
+ "ptt_hold_to_talk": "Tieni premuto per parlare",
+ "ptt_transmitting": "In trasmissione",
+ "ptt_listening": "In ascolto",
+ "ptt_hold_hint": "Tieni premuto per aprire la trasmissione in questa chiamata half duplex",
+ "ptt_spacebar_hint": "Tieni premuto Spazio per parlare",
+ "tx_packets": "Pacchetti TX",
+ "rx_packets": "Pacchetti RX",
+ "tx_data": "Dati TX",
+ "rx_data": "Dati RX",
+ "tx_rate": "Velocità TX",
+ "rx_rate": "Velocità RX",
+ "failed_to_switch_call_mode": "Impossibile cambiare la modalità duplex",
+ "failed_to_set_ptt": "Impossibile impostare il push-to-talk",
"active_call": "Chiamata Attiva",
"status": "Stato",
"failed_to_answer_call": "Impossibile rispondere alla chiamata",

diff --git a/meshchatx/src/frontend/locales/nl.json b/meshchatx/src/frontend/locales/nl.json
index ab36e264..53d47d7a 100644
--- a/meshchatx/src/frontend/locales/nl.json
+++ b/meshchatx/src/frontend/locales/nl.json
@@ -3160,6 +3160,24 @@
"minimize": "Minimaliseren",
"active": "Actief",
"default_quality": "Standaardkwaliteit",
+ "default_duplex": "Standaard duplex",
+ "full_duplex": "Full-duplex",
+ "half_duplex": "Half-duplex",
+ "switch_to_full_duplex": "Overschakelen naar full-duplex",
+ "switch_to_half_duplex": "Overschakelen naar half-duplex",
+ "ptt_hold_to_talk": "Vasthouden om te spreken",
+ "ptt_transmitting": "Aan het zenden",
+ "ptt_listening": "Aan het luisteren",
+ "ptt_hold_hint": "Houd ingedrukt om te zenden tijdens dit half-duplex gesprek",
+ "ptt_spacebar_hint": "Houd Spatie ingedrukt om te spreken",
+ "tx_packets": "TX-pakketten",
+ "rx_packets": "RX-pakketten",
+ "tx_data": "TX-gegevens",
+ "rx_data": "RX-gegevens",
+ "tx_rate": "TX-snelheid",
+ "rx_rate": "RX-snelheid",
+ "failed_to_switch_call_mode": "Overschakelen van duplexmodus mislukt",
+ "failed_to_set_ptt": "Push-to-talk instellen mislukt",
"active_call": "Actieve oproep",
"status": "Status",
"failed_to_answer_call": "Kon gesprek niet beantwoorden",

diff --git a/meshchatx/src/frontend/locales/ru.json b/meshchatx/src/frontend/locales/ru.json
index f0717e92..bf40429e 100644
--- a/meshchatx/src/frontend/locales/ru.json
+++ b/meshchatx/src/frontend/locales/ru.json
@@ -2964,6 +2964,24 @@
"minimize": "Свернуть",
"active": "Активен",
"default_quality": "Качество по умолчанию",
+ "default_duplex": "Дуплекс по умолчанию",
+ "full_duplex": "Полный дуплекс",
+ "half_duplex": "Полудуплекс",
+ "switch_to_full_duplex": "Переключить на полный дуплекс",
+ "switch_to_half_duplex": "Переключить на полудуплекс",
+ "ptt_hold_to_talk": "Удерживайте, чтобы говорить",
+ "ptt_transmitting": "Передача",
+ "ptt_listening": "Приём",
+ "ptt_hold_hint": "Удерживайте, чтобы открыть передачу в этом полудуплексном вызове",
+ "ptt_spacebar_hint": "Удерживайте пробел, чтобы говорить",
+ "tx_packets": "Пакеты TX",
+ "rx_packets": "Пакеты RX",
+ "tx_data": "Данные TX",
+ "rx_data": "Данные RX",
+ "tx_rate": "Скорость TX",
+ "rx_rate": "Скорость RX",
+ "failed_to_switch_call_mode": "Не удалось переключить режим дуплекса",
+ "failed_to_set_ptt": "Не удалось включить режим нажал-говори",
"active_call": "Активный звонок",
"status": "Статус",
"failed_to_answer_call": "Не удалось ответить на звонок",

diff --git a/meshchatx/src/frontend/locales/zh.json b/meshchatx/src/frontend/locales/zh.json
index 6786f75d..965a31d6 100644
--- a/meshchatx/src/frontend/locales/zh.json
+++ b/meshchatx/src/frontend/locales/zh.json
@@ -3160,6 +3160,24 @@
"minimize": "最小化",
"active": "活跃",
"default_quality": "默认质量",
+ "default_duplex": "默认双工",
+ "full_duplex": "全双工",
+ "half_duplex": "半双工",
+ "switch_to_full_duplex": "切换到全双工",
+ "switch_to_half_duplex": "切换到半双工",
+ "ptt_hold_to_talk": "按住说话",
+ "ptt_transmitting": "正在发送",
+ "ptt_listening": "正在收听",
+ "ptt_hold_hint": "在半双工通话中按住以打开发送",
+ "ptt_spacebar_hint": "按住空格键说话",
+ "tx_packets": "发送数据包",
+ "rx_packets": "接收数据包",
+ "tx_data": "发送数据",
+ "rx_data": "接收数据",
+ "tx_rate": "发送速率",
+ "rx_rate": "接收速率",
+ "failed_to_switch_call_mode": "切换双工模式失败",
+ "failed_to_set_ptt": "设置一键通失败",
"active_call": "活动通话",
"status": "状态",
"failed_to_answer_call": "接听通话失败",

diff --git a/tests/backend/fixtures/http_api_routes.json b/tests/backend/fixtures/http_api_routes.json
index c5e309ab..461c1e1d 100644
--- a/tests/backend/fixtures/http_api_routes.json
+++ b/tests/backend/fixtures/http_api_routes.json
@@ -28,14 +28,14 @@
"method": "GET",
"path": "/api/v1/app/info"
},
- {
- "method": "GET",
- "path": "/api/v1/app/sessions"
- },
{
"method": "POST",
"path": "/api/v1/app/integrity/acknowledge"
},
+ {
+ "method": "GET",
+ "path": "/api/v1/app/sessions"
+ },
{
"method": "POST",
"path": "/api/v1/app/shutdown"
@@ -1476,6 +1476,10 @@
"method": "GET",
"path": "/api/v1/telephone/audio-profiles"
},
+ {
+ "method": "GET",
+ "path": "/api/v1/telephone/call-modes"
+ },
{
"method": "POST",
"path": "/api/v1/telephone/call/{identity_hash}"
@@ -1536,6 +1540,10 @@
"method": "POST",
"path": "/api/v1/telephone/mute-transmit"
},
+ {
+ "method": "POST",
+ "path": "/api/v1/telephone/ptt"
+ },
{
"method": "GET",
"path": "/api/v1/telephone/recordings"
@@ -1584,6 +1592,10 @@
"method": "POST",
"path": "/api/v1/telephone/switch-audio-profile/{profile_id}"
},
+ {
+ "method": "POST",
+ "path": "/api/v1/telephone/switch-call-mode/{mode_id}"
+ },
{
"method": "POST",
"path": "/api/v1/telephone/unmute-receive"


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────